
#include "stdafx.h"
#include "strategy.h"
#include "jugadores.h"
#include "log.h"
#include "helpers.h"

typedef struct
{
	bool local;	//	Indica si juego de local (izquierda) o de visitante (derecha)
	
	double x;
	double y;
	int teamColor;
	
} DelanteroData;

int kick = -1;

void DelanteroPenal(Robot *robot, Environment *env, int numero, Equipo equipo) {
	
	if(kick == -1) {
		kick = EstaDeNuestroLadoLaPelota(equipo, env->currentBall.pos.x) ? 0 : 1;
	}

	if(numero == 3 || kick == 0) {

		double xt;
		if (equipo == Local)
		{
			xt = AREA_CHICA_LINEA_IZQUIERDA;
		}
		else
		{
			xt = AREA_CHICA_LINEA_DERECHA;
		}

		GoTo(robot, xt, MITAD_DE_CANCHA_EN_Y, 1);

	}
	else {

		//	Si voy a patear



		double xt, yt;
		if (equipo == Local)
		{
			xt = PUNTO_PENAL_AZUL_EN_X;
			yt = PUNTO_PENAL_AZUL_EN_Y;
		}
		else
		{
			xt = PUNTO_PENAL_AMARILLO_EN_X;
			yt = PUNTO_PENAL_AMARILLO_EN_Y;
		}

		GoTo(robot, xt, yt, 80);

	}


}

/**
 *	estrategia: si la pelota esta en nuestro lado bajar y marcar si no
     subir y marcar gol
 *
 */
void Delantero( Robot *robot, Environment *env, int numero, bool masCerca )
{
	//	Variables iniciales

	double x = robot->pos.x;
	double y = robot->pos.y;

	std::string name;
	ToString(name, numero);

	name = "def-"+ name;	//	Nombre: "def-{numero}"



    DelanteroData* data = (DelanteroData*)GetData(env, name);

    if(data == NULL) 
	{
		data = new DelanteroData();
		
		data->x = x;
		data->y = y;
		data->local = robot->pos.x < MITAD_DE_CANCHA_EN_X;
		data->teamColor = (x < MITAD_DE_CANCHA_EN_X ? YELLOW_BALL : BLUE_BALL);
		SetData(env, name, (void*)data);
	}



	

	double xi = data->x;
	double yi = data->y;

	double xb = env->predictedBall.pos.x;
	double yb = env->predictedBall.pos.y;

	//double vl, vr;	//	Para eliminar el warning
	

     // si la pelota esta de nuestro lado sigo la pelota
	if(EstaDeNuestroLadoLaPelota(data->teamColor, xb)) 
	{
          GoTo(robot, xb, yb);
		  Log("robot3", "Status: ESTA EN NUESTRA CANCHA ", x, y, xb, yb);
    }

	else
	{
		   // si la pelota no esta en nuestro campo uno va al area como de 9 
		   if(numero == 4)
		 {
		   if(data->teamColor == YELLOW_BALL)
		   {
			 
             GoTo(robot, PUNTO_PENAL_AZUL_EN_X, PUNTO_PENAL_AZUL_EN_Y,VELOCIDAD_ATAQUE);
		     //GoTo(robot, MITAD_DE_CANCHA_EN_X,PUNTO_PENAL_AZUL_EN_Y,VELOCIDAD_ATAQUE);
			 Log("robot3", "Status:  robot amarillo va al area contraria ", x, y, xb, yb);
		   }
		   else
		   {
             GoTo(robot, PUNTO_PENAL_AMARILLO_EN_X, PUNTO_PENAL_AMARILLO_EN_Y,VELOCIDAD_ATAQUE);
			 //GoTo(robot, MITAD_DE_CANCHA_EN_X,PUNTO_PENAL_AMARILLO_EN_Y,VELOCIDAD_ATAQUE);
			 Log("robot3", "Status:  robot azul va al area contraria ", x, y, xb, yb);
		   }
		 }
		   // el otro busca la pelota
		   if(numero == 3)
            GoTo(robot, xb, yb);
	   Log("robot3", "Status:  NO ESTA EN NUESTRA CANCHA ", x, y, xb, yb);
	} 
	 
}
